# 1、有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？
# 程序分析：可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

# 百分位
for i in range(1, 5):
    # 十位
    for j in range(1, 5):
        # 个位
        for k in range(1, 5):
            # 去掉重复数字
            if i != j and i != k and j != k:
                print(int("{}{}{}".format(i, j, k)))

print("=" * 100)
# 2、打印出所有的水仙花数，所谓水仙花数是指一个三位数，其各位数字立方和等于该数本身。
# 例如：153是一个水仙花数，因为153=1的三次方＋5的三次方＋3的三次方。
# 程序分析：利用for循环控制100-999个数，每个数分解出个位，十位，百位。

for i in range(100, 1000):
    # 百分位
    b = i // 100
    # 十分位i
    s = i // 10 % 10
    # 个位
    g = i % 10

    if b ** 3 + s ** 3 + g ** 3 == i:
        print(i)
print("=" * 100)
# 第二种
for i in range(100, 1000):
    # 将整数转换成字符串
    stri = str(i)
    # 百分位
    b = int(stri[0])
    # 十分位i
    s = int(stri[1])
    # 个位
    g = int(stri[2])

    if b ** 3 + s ** 3 + g ** 3 == i:
        print(i)
print("=" * 100)

# 4、一球从100米高度自由落下，每次落地后反跳回原高度的一半；再落下，
# 求它在第10次落地时，共经过多少米？第10次反弹多高？

# 保存回弹的高度
ht = 100
# 保存总距离变量
sum_length = ht

for i in range(9):
    # 每一次落地回弹的高度
    ht = ht / 2

    # 累加距离
    sum_length = sum_length + ht * 2

# 第十次回弹的高度
ht = ht / 2

print("总距离{}，第十次回弹的高度{}".format(sum_length, ht))
